package com.czh.service.impl;

import com.czh.utils.ThreadUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * @author chenzhihua
 * @Date 2024/8/7
 */
@Service
@Slf4j
public class AsyncService2Impl {
    /**
     * 定义一个异步方法
     */
    @Async("taskExecutor")
    public void asyncMethod() {
        log.info("执行一个异步方法发送邮件: {}", Thread.currentThread().getName());
    }

    /**
     * 定义两个并行计算的方法
     *
     * @param nums
     * @return
     */
    @Async("taskExecutor")
    public CompletableFuture<Double> calculatePrice(List<Double> nums) {
        // 计算总价
        double sum = nums.stream().mapToDouble(t -> t).sum();
        // 模拟耗时操作
        ThreadUtils.sleep(3000);
        return CompletableFuture.completedFuture(sum);
    }

    @Async("taskExecutor")
    public CompletableFuture<List<String>> generateRecommendations(Integer id) {
        // 推荐商品生成
        List<String> list = Arrays.asList("商品1" + id, "商品2" + id);
        // 模拟耗时操作
        ThreadUtils.sleep(5000);
        return CompletableFuture.completedFuture(list);
    }

}
